উদাহরণ সহ Performance Optimization

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) Spring JDBC এবং Performance Optimization |
83
83

Spring JDBC ব্যবহারের সময় ডাটাবেস অপারেশনের পারফরম্যান্স উন্নত করা গুরুত্বপূর্ণ, বিশেষত বড় অ্যাপ্লিকেশন বা জটিল ডাটাবেস অপারেশনের ক্ষেত্রে। কিছু সাধারণ Performance Optimization টেকনিক ব্যবহার করে ডাটাবেস অ্যাক্সেস আরও কার্যকর করা যায়।


Spring JDBC Performance Optimization টেকনিক

  1. Batch Processing ব্যবহার করা
  2. PreparedStatement ক্যাশিং
  3. Connection Pooling
  4. Indexed Queries ব্যবহার করা
  5. Pagination ব্যবহার করা
  6. RowMapper-এর পরিবর্তে ResultSetExtractor ব্যবহার করা
  7. Lazy Loading এবং Fetch Size ব্যবহার করা

1. Batch Processing ব্যবহার করা

একাধিক রেকর্ড ইনসার্ট বা আপডেট করার জন্য Batch Processing ব্যবহার করলে অপারেশন আরও দ্রুত হয়, কারণ একাধিক স্টেটমেন্ট একত্রে চালানো হয়।

উদাহরণ:

String sql = "INSERT INTO users (name, email) VALUES (?, ?)";

jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
    @Override
    public void setValues(PreparedStatement ps, int i) throws SQLException {
        ps.setString(1, "User " + i);
        ps.setString(2, "user" + i + "@example.com");
    }

    @Override
    public int getBatchSize() {
        return 100; // 100 রেকর্ড একত্রে প্রসেস হবে
    }
});
System.out.println("Batch insertion completed!");
ব্যাখ্যা:
  • BatchPreparedStatementSetter: এটি একাধিক রেকর্ড একত্রে প্রসেস করতে দেয়।
  • কম সংখ্যক নেটওয়ার্ক কল ডাটাবেস অপারেশনের সময় কমায়।

2. PreparedStatement ক্যাশিং

PreparedStatement পুনরায় ব্যবহার করলে ডাটাবেসের লোড কমে এবং অপারেশন দ্রুত হয়।

উদাহরণ:

String sql = "SELECT * FROM users WHERE email = ?";
List<User> users = jdbcTemplate.query(sql, new Object[]{"example@example.com"}, new BeanPropertyRowMapper<>(User.class));
ব্যাখ্যা:
  • PreparedStatement পুনরায় কম্পাইল করার প্রয়োজন হয় না, কারণ এটি ক্যাশ করা হয়।
  • Spring JDBC-এর JdbcTemplate এটি অটোমেটিকভাবে হ্যান্ডল করে।

3. Connection Pooling

Connection Pooling ডাটাবেস কানেকশনের পুনঃব্যবহার নিশ্চিত করে, যা কানেকশন তৈরির সময় এবং রিসোর্সের অপচয় কমায়।

HikariCP ব্যবহার:

@Bean
public DataSource dataSource() {
    HikariDataSource dataSource = new HikariDataSource();
    dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
    dataSource.setUsername("root");
    dataSource.setPassword("password");
    dataSource.setMaximumPoolSize(10); // Max 10 connections
    return dataSource;
}
ব্যাখ্যা:
  • HikariCP Spring Boot-এ ডিফল্ট DataSource, যা দ্রুত এবং কার্যকর।
  • কানেকশন তৈরির ও বন্ধ করার ওভারহেড কমায়।

4. Indexed Queries ব্যবহার করা

ডাটাবেস টেবিলে সঠিক ইনডেক্স যোগ করে কোয়েরি এক্সিকিউশন টাইম কমানো যায়।

উদাহরণ:

CREATE INDEX idx_email ON users(email);
String sql = "SELECT * FROM users WHERE email = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]{"example@example.com"}, new BeanPropertyRowMapper<>(User.class));
ব্যাখ্যা:
  • Index ব্যবহার করলে ডাটাবেস কম রেকর্ড স্ক্যান করে, ফলে অপারেশন দ্রুত হয়।

5. Pagination ব্যবহার করা

বড় ডাটাসেট ফিল্টার করার সময় Pagination ব্যবহার করলে পারফরম্যান্স উন্নত হয়।

উদাহরণ:

String sql = "SELECT * FROM users LIMIT ? OFFSET ?";
List<User> users = jdbcTemplate.query(sql, new Object[]{10, 20}, new BeanPropertyRowMapper<>(User.class));
ব্যাখ্যা:
  • LIMIT এবং OFFSET ব্যবহার করে পৃষ্ঠাভিত্তিক ডেটা ফিল্টার করা যায়।
  • বড় ডাটাসেট প্রসেসিং এড়ানো যায়।

6. RowMapper-এর পরিবর্তে ResultSetExtractor ব্যবহার করা

যদি একাধিক রেকর্ড প্রসেস করতে হয়, তাহলে ResultSetExtractor ব্যবহার করলে পারফরম্যান্স আরও উন্নত হয়।

উদাহরণ:

public class UserResultSetExtractor implements ResultSetExtractor<List<User>> {
    @Override
    public List<User> extractData(ResultSet rs) throws SQLException {
        List<User> users = new ArrayList<>();
        while (rs.next()) {
            User user = new User();
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            user.setEmail(rs.getString("email"));
            users.add(user);
        }
        return users;
    }
}

// JdbcTemplate query:
String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate.query(sql, new UserResultSetExtractor());
ব্যাখ্যা:
  • ResultSetExtractor পুরো ResultSet প্রসেস করার সুযোগ দেয়।
  • জটিল ডেটা স্ট্রাকচারের ক্ষেত্রে এটি কার্যকর।

7. Lazy Loading এবং Fetch Size ব্যবহার করা

Lazy Loading বড় ডেটাসেট প্রসেস করার সময় ডেটা লোডিং বিলম্বিত করে। Fetch Size ব্যবহার করে ডেটা পর্যায়ক্রমে লোড করা যায়।

উদাহরণ:

jdbcTemplate.setFetchSize(50); // প্রতি বার ৫০ রেকর্ড ফেচ করবে
String sql = "SELECT * FROM users";
jdbcTemplate.query(sql, rs -> {
    while (rs.next()) {
        System.out.println("User: " + rs.getString("name"));
    }
});
ব্যাখ্যা:
  • setFetchSize() বড় ডাটাসেটের ক্ষেত্রে কার্যকর, কারণ এটি স্মৃতির ব্যবহার কমায়।
  • Lazy Loading তখনই ডেটা লোড করে, যখন প্রয়োজন।

উপসংহার

Spring JDBC-তে Performance Optimization করার জন্য উপরের টেকনিকগুলো কার্যকরভাবে ব্যবহার করা যেতে পারে। বিশেষত:

  • Batch Processing একাধিক ডাটাবেস অপারেশন দ্রুত করে।
  • Connection Pooling কানেকশন ম্যানেজমেন্ট সহজ করে।
  • Pagination বড় ডাটাসেটের কোয়েরি প্রসেসিং উন্নত করে।

সঠিক অপ্টিমাইজেশন টেকনিক ব্যবহার করে আপনি Spring JDBC-তে ডাটাবেস অ্যাক্সেস আরও দ্রুত এবং কার্যকর করতে পারবেন।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion